iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
Modern Web

自動化 End-End 測試 Nightwatch.js系列 第 18

自動化 End-End 測試 Nightwatch.js 之踩雷筆記:iframe

  • 分享至 

  • xImage
  •  

<iframe>

<iframe> 是在 HTML 用來內嵌另外一個 HTML 網頁的,例如 SurveyCake 就有這樣的功能

https://ithelp.ithome.com.tw/upload/images/20211003/20120250ylRuByDO77.png

<iframe id="surveycake" width="100%" height="600px" src="https://surveycake.com/s/?????"
    style="border:#ddd 1px solid;" allowTransparency="true" frameborder="0"></iframe>

而在使用 Nightwatch 測試網站時,遇到 iframe 是不能直接讀取 iframe 裡面的文字的。
會出現像這樣的錯誤:

"element could not be located" (5544ms)

這是因為 Nigthwatch 或應該說 WebDrive 抓取的是 current browsing context
因此屬於 iframe 當中的文字是抓取不到的

frame()

Nightwatch 有提供 .frame() 這個 API 可以使用,參數可以帶 ID 或數字,從 0 開始

舉例而言:

browser.frame(0)
browser.frame('surveycake')

退出 frame 只要使用 .frame(null).frameParent() 即可。

需要注意的點

如果 frame 是動態載入的,使用 frame ID 則不一定抓取得到。而 frame 的 number 也不是由上而下來決定 0, 1, 2, ... 的。

因此,使用前最好還是試一下正確的 frame number,而動態載入抓取不到的部分,則可以利用 .getAttribute() 取得 src 在新分頁進行檢查。

browser.getAttribute('section iframe', 'src', function(result) {
  .verify.containsText('[aria-label="intro"]', 'intro');
}

上一篇
自動化 End-End 測試 Nightwatch.js 之踩雷筆記:關閉多視窗
下一篇
自動化 End-End 測試 Nightwatch.js 之踩雷筆記:select option
系列文
自動化 End-End 測試 Nightwatch.js30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言